<!DOCTYPE html>
<title>This tests that a mouse/keyboard event on the controls will not be seen by the video element.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="media-controls.js"></script>
<video controls></video>
<script>
async_test(function(t) {
    var video = document.querySelector("video");

    video.onclick = t.unreached_func();
    video.ondblclick = t.unreached_func();
    video.onpointerdown = t.unreached_func();
    video.onpointerup = t.unreached_func();
    video.onmousedown = t.unreached_func();
    video.onmouseup = t.unreached_func();

    video.onloadeddata = t.step_func_done(function() {
        // click the play button.
        var coords = mediaControlsButtonCoordinates(video, "play-button");
        eventSender.mouseMoveTo(coords[0], coords[1]);
        sendMouseAndKeyEvents();

        // Click the current time display, which should not respond to events,
        // but should still capture them.
        coords = mediaControlsButtonCoordinates(video, "current-time-display");
        eventSender.mouseMoveTo(coords[0], coords[1]);
        sendMouseAndKeyEvents();

        // Click the timeline - this tests that multilevel shadow DOM elements work.
        coords = mediaControlsButtonCoordinates(video, "timeline");
        eventSender.mouseMoveTo(coords[0], coords[1]);
        sendMouseAndKeyEvents();

        // If we're not dragging, then we should get a mousemove.
        var mouseMoveEventCount = 0;
        video.onmousemove = t.step_func(function() {
            mouseMoveEventCount++;
        });

        eventSender.mouseMoveTo(coords[0] + 10, coords[1]);
        // Expect another as we move back to the slider.
        eventSender.mouseMoveTo(coords[0], coords[1]);

        // The above, positioned the slider under the mouse.
        // Click to begin a drag.
        eventSender.mouseDown();
        video.onmousemove = t.unreached_func();
        video.onpointermove = t.unreached_func();

        // Check that the timeline also captures mousemove if the
        // slider is being dragged.
        eventSender.mouseMoveTo(coords[0] + 10, coords[1] + 10)
        assert_equals(mouseMoveEventCount, 2);
    });

    function sendMouseAndKeyEvents() {
        eventSender.mouseDown();
        eventSender.mouseUp();
    }

    video.src = "content/test.ogv";
});
</script>
